
package org.sql.commands.mysql.command;

// *************************************************************************/
// Charada Soft
// Area de Desarrollo de Sistemas de Información
// *************************************************************************/
// Proyecto : java connector sql 
// Archivo : Update.java
// Descripcion : Clase Update
// *************************************************************************/
// Version : 2.10.4
// Fecha de Creación: 02 de Julio de 2014
// Author : Daniel Andres Castillo Pedroza
// *************************************************************************/

import java.util.ArrayList;
import org.sql.commands.exception.DMLException;
import org.sql.commands.mysql.clause.Where;

public class Update extends DML {
    
    // Atributos de la clase Update
    
    private ArrayList <String> columns;
    private Where where;
    private String table;
    
    // Constructor de la clase Update
    
    public Update() {
      columns = new ArrayList <> ();
    }
    
    // Metodos de la clase Update
    
    /**
      * 
      * @param columns 
    */

    public void setColumns(ArrayList <String> columns) {
      this.columns = columns;
    }
    
    /**
      * 
      * @param column 
    */
    
    public void addColumn(String column) {
      columns.add(column);
    }
    
    /**
      * 
      * @param where 
    */

    public void setWhere(Where where) {
      this.where = where;
    }
    
    /**
      * 
      * @param table 
    */

    public void setTable(String table) {
      this.table = table;
    }
    
    // Metodos estáticos de la clase Update
    
    /**
      * 
      * @param table
      * @param column
      * @return 
    */
    
    public static Update creatorCommand(String table, String column) {
      Update update = new Update(); // Instanciando objeto
      update.setTable(table); update.addColumn(column);
      
      return update; // Retornando Objeto UPDATE
    }
    
    /**
      * 
      * @param table
      * @param columns
      * @return 
    */
    
    public static Update creatorCommand(String table, ArrayList <String> columns) {
      Update update = new Update(); // Instanciando objeto
      update.setTable(table); update.setColumns(columns);
      
      return update; // Retornando Objeto UPDATE
    }
    
    /**
      * 
      * @param table
      * @param column
      * @param where
      * @return 
    */
    
    public static Update creatorCommand(String table, String column, Where where) {
      Update update = new Update(); // Instanciando objeto
      update.setTable(table); update.addColumn(column); update.setWhere(where);
      
      return update; // Retornando Objeto UPDATE
    }
    
    /**
      * 
      * @param table
      * @param columns
      * @param where
      * @return 
    */
    
    public static Update creatorCommand(String table, ArrayList <String> columns, Where where) {
      Update update = new Update(); // Instanciando objeto
      update.setTable(table); update.setColumns(columns); update.setWhere(where);
      
      return update; // Retornando Objeto UPDATE
    }
    
    // Metodos sobreescritos de la clase Update

    @Override
    public String getCommand() throws DMLException {
      if ((table == null) || (table.isEmpty())) {
        throw new DMLException(DMLException.TABLE_UNDEFINED);
      } // No ha establecido el Nombre de Tabla
      
      // Declarando y configurando dato para Proceso
      String commandUpdate = "UPDATE " + table + " SET"; 
      
      if ((columns == null) || (columns.isEmpty())) {
        throw new DMLException(DMLException.COLUMNS_UNDEFINED);
      } // No ha definido las Columnas de la Sentencia
      
      commandUpdate += " " + ConfiguratorCommand.columnsForUpdate(columns);
      
      if (where != null) {
        commandUpdate += " " + where.getClause();
      } // Estableciendo clausula de Actualización
      
      return commandUpdate; // Retornando Comando UPDATE
    }    
}